package zcache

import (
	"sync"
	"zcache/lru"
)

// 并发控制


// 并发安全的cache, 基于lru做了一层封装, 使缓存类型更通用
type cache struct {
	mu         sync.Mutex
	lru        *lru.Cache
	cacheBytes int64
}


// 添加缓存, 要求值为ByteView类型, 即二进制形式存储
func (c *cache) add(key string, value ByteView) {
	c.mu.Lock()
	defer c.mu.Unlock()

	// 延迟加载lru成员
	if c.lru == nil {
		c.lru = lru.New(c.cacheBytes, nil)
	}

	// 添加缓存
	c.lru.Add(key, value)
}


// 获取缓存
func (c *cache) get(key string) (value ByteView, ok bool) {
	c.mu.Lock()
	defer c.mu.Unlock()

	if c.lru == nil {
		return
	}

	if v, ok := c.lru.Get(key); ok {
		return v.(ByteView), ok
	}

	return
}